/* permission.js 是控制页面登录权限的文件， 此处的代码没有经历构建过程会很难理解，
   所以先将此处的代码进行注释，等我们构建权限功能时，再从0到1进行构建。 */
import router from "@/router/index.js";
import store from "@/store/index.js"; // 引入store实例, 和组件中的this.$store是一回事
import Nprogress from 'nprogress' // 引入进度条模块
import 'nprogress/nprogress.css' // 引入进度条样式
const whiteList = ['/login', '/404'] // 定义白名单, 所有不受权限控制的页面
// 不需要导出, 因为只需要让代码执行即可
// 前置路由守卫
// 当你要对路由权限判断时需要使用路由守卫
// next是前置守卫必须必须必须执行的钩子, next必须执行, 如果不执行, 页面就寄了
// next() 放过 next(false) 跳转终止 next(地址) 跳转到某个地址
// to 就是去哪里, from 从哪来
// 路由跳转"之前"先执行前置路由守卫, 决定是否跳转
router.beforeEach(async (to, from, next) => {
   Nprogress.start() // 开启进度条
   // 判断是否有token
   // 有token的情况下, 才能获取资料
   if (store.getters.token) {
      // 如果有token 继续判断是不是去登录页
      if (to.path === '/login') {
         next('/') // 跳到主页
      } else {
         // 只有放行的情况下才能获取用户资料
         // 如果当前vuex中有用户资料的id表示已经有资料了, 不需要获取了, 如果没有id才需要获取
         if (!store.getters.userId) {
            // 如果没有id才表示当前用户资料没有获取过, dispatch 触发action
            // 这里必须使用await, 得获取资料之后才能放行跳转到对应的页面
            await store.dispatch('user/getUserInfo')
         }
         next() // 直接放行
      }
   } else {
      // 如果没有token
      // 检查路径的页面路径是否在白名单里面
      // indexOf来检测数组中每一项是否包含这个元素,不包含返回-1，数组中值的内容包含这个内容, 就返回该值在数组中的索引
      if (whiteList.indexOf(to.path) > -1) {
         next() // 直接放行
      } else {
         next('/login') // 跳到登录页
      }
   }
   // 因为手动跳转后置路由守卫里面的代码不会执行, 所以需要手动强制关闭一次进度条
   Nprogress.done()
})
// 后置路由守卫
// 路由跳转"之后"先执行后置路由守卫, 决定是否执行某些操作
// 注意: 手动跳转这个后置路由守卫里面的代码不会执行
router.afterEach(() => {
   Nprogress.done() // 关闭进度条
})
// import router from './router'
// import store from './store'
// import { Message } from 'element-ui'
// import NProgress from 'nprogress' // progress bar
// import 'nprogress/nprogress.css' // progress bar style
// import { getToken } from '@/utils/auth' // get token from cookie
// import getPageTitle from '@/utils/get-page-title'

// NProgress.configure({ showSpinner: false }) // NProgress Configuration

// const whiteList = ['/login'] // no redirect whitelist

// router.beforeEach(async(to, from, next) => {
//   // start progress bar
//   NProgress.start()

//   // set page title
//   document.title = getPageTitle(to.meta.title)

//   // determine whether the user has logged in
//   const hasToken = getToken()

//   if (hasToken) {
//     if (to.path === '/login') {
//       // if is logged in, redirect to the home page
//       next({ path: '/' })
//       NProgress.done()
//     } else {
//       const hasGetUserInfo = store.getters.name
//       if (hasGetUserInfo) {
//         next()
//       } else {
//         try {
//           // get user info
//           await store.dispatch('user/getInfo')

//           next()
//         } catch (error) {
//           // remove token and go to login page to re-login
//           await store.dispatch('user/resetToken')
//           Message.error(error || 'Has Error')
//           next(/login?redirect=${to.path}`)
//           NProgress.done()
//         }
//       }
//     }
//   } else {
//     /* has no token*/

//     if (whiteList.indexOf(to.path) !== -1) {
//       // in the free login whitelist, go directly
//       next()
//     } else {
//       // other pages that do not have permission to access are redirected to the login page.
//       next(`/login?redirect=${to.path}`)
//       NProgress.done()
//     }
//   }
// })

// router.afterEach(() => {
//   // finish progress bar
//   NProgress.done()
// })